Mesajlaşma Köprüsü Yığını
Connext, güvenli köprü tasarımının önemini vurgulayan bir proje olarak karşımıza çıkıyor. Son zamanlarda köprü protokollerindeki başarısızlıkların neden olduğu kötü amaçlı saldırılar, köprü mimarisi için en iyi uygulamaların eksikliği ve harici olarak doğrulanmış köprü projelerinin sayısının artması, geliştiricileri güvenli bir şekilde zincirler arası geliştirme yapmanın mümkün olup olmadığı konusunda endişelendirmiş durumda.
Connext, geçen yıl Amarok yükseltmesini tasarlarken köprüleme konusunda yeniden ilkelerden yola çıkarak, bir mesajlaşma köprüsünün farklı bileşenlerini ve bunların güvenilirlik ve güvenlik risklerini özellikle belirleyerek yeniden düşünmeye ihtiyaç duydu. Connext, bu bileşenleri çözmek için nasıl çalışabileceğimizi açıklamaya çalışarak köprüleme sorununu çözmek için birlikte nasıl çalışabileceğimizi topluluğa açıklamayı amaçlamaktadır.
Bir köprü nedir sorusundan başlayarak, blog yazısında bir köprünün tanımı, farklı bileşenleri ve bunların nasıl çalıştığı hakkında bilgi verilmiştir. Bir köprü, zincirler arasında token transferine izin veren bir arayüz veya protokol veya bir zincirden diğerine (arbitrary) mesaj göndermek için bir mekanizma olabilir. Blog yazısında, mesajlaşma köprüsünün birinci tanımına odaklanılarak, bu tanımın herhangi bir uygulama özgü köprü için temel oluşturduğu ve uygulama özgü köprülerin kullanım durumlarına göre nitelendirildiği belirtilmiştir.
Blog yazısında, tüm mesajlaşma köprülerinin benzer bir yapıya sahip olduğu belirtilerek, üç bileşenin uygulandığı söylenmiştir: Transport, Verification ve Execution. Transport, verilerin bir alandan diğerine nasıl taşındığını, Verification, doğrulamanın nasıl yapıldığını ve Execution, taşınan ve doğrulanan verilerin hedef sözleşmeyle nasıl yürütüldüğünü ifade etmektedir.
Mesaj doğrulama katmanının köprülerin en zorlayıcı ve riskli bileşeni olduğu ve köprü güvenliğini etkileyen birçok faktörün olduğu belirtilmiştir. Herhangi bir uygulama geliştiricisinin kendi mesaj doğrulama işlevini oluşturması, yanlış bir adım atma sonucunda köprü için ciddi sonuçlar doğurabileceği için önerilmez.
Connext, köprü tasarımındaki güvenlik açıklarının neden olduğu hack'lerin artması ve köprü mimarisi için en iyi uygulamaların eksikliği ile karşı karşıya olan geliştiricilerin çoğunun güvenli çapraz zincirli geliştirme mümkün mü diye sormasına neden oldu. Connext'in Amarok güncellemesini tasarlarken, güvenli köprü tasarımını belirlemek için ilkelerden yola çıkarak köprüleme konusunu yeniden düşünmemiz gerektiğini fark ettik. Bunu yapmak için öncelikle aşağıdakileri özelleştirmemiz gerekti:
- Bir mesaj köprüsünün farklı bileşenleri nelerdir?
- Hangi bileşenler güven ve güvenlik riskine en çok katkıda bulunur?
- Bu bileşenlerin riskini nasıl dengeleyebilir veya azaltabiliriz?
Bu yazı serisiyle amacımız, yukarıdakileri açıklamak ve bunu yaparak, nasıl bir araya gelip köprüleme sorunlarını çözebileceğimiz konusunda nasıl çalışabileceğimizi açıklamaktır.
Bir köprü nedir? Temel olarak, bir köprü iki zincir arasında veri transferi yapabilen bir mekanizmadır. Fakat "köprü" terimi, bir uygulama arayüzünden, verileri göndermek için kullanılan bir protokolden ve iki zincir arasında mesaj geçişini sağlayan bir mekanizmadan bahsetmek için kullanılabilir. Bu nedenle, bu yazıdaki mesaj köprüsü, (3) numaralı tanıma göre olacaktır. Bu tanım, herhangi bir uygulama için özelleştirilmiş bir köprüyü de kapsayabilir. Örneğin bir NFT köprüsü veya jeton köprüsü gibi.
Mesaj Köprüsü Akışı Bugün birçok farklı mesaj köprüsü yapısı mevcut olsa da, tüm mesaj köprüleri aşağıdaki üç bileşeni uygular:
- Taşıma: Bir zincirden diğerine mesaj veri göndermek.
- Doğrulama: Yukarıdaki verinin doğruluğunu kanıtlama.
- Yürütme: Köprü verileriyle bir şeyler yapma.
Taşıma, verinin bir etki alanından okunup başka birine iletilmesiyle yapılır ve verinin doğruluğuyla ilgilenmez. Genellikle taşıma, orijin zincir köprü sözleşmesindeki bir "çıkış" kutusunu izleyen bir veya birkaç zincir dışı aktör tarafından yapılır ve sonra karşılık gelen veriler hedef zincir köprü sözleşmesindeki bir "gelen" kutusuna gönderilir.
Bununla birlikte, mesaj doğrulama katmanındaki zorluklar, bu katmanın güvenliği açısından oldukça zorlu hale getiriyor. Doğrulama katmanı, güvenli olmasına rağmen ekonomik saldırılara karşı risk altında olabiliyor. Örneğin, m-of-n doğrulama katmanının %51 saldırısına maruz kalması durumunda, mesaj doğrulama da risk altında kalabiliyor. Bu zorluklar, doğrulama katmanlarını denetlemeyi oldukça zor hale getiriyor.
Önemli bir nokta da, herhangi bir köprü hacki, mesaj doğrulama başarısızlığıyla ilgili oluyor. Doğrulama katmanı hacklendiğinde, saldırganlar köprü tarafından kontrol edilen her şeye "öncelikli" erişim elde edebiliyorlar. Örneğin, köprü üzerinden köprülenmiş herhangi bir kilitli token gibi. Bu nedenle, biz (ve birçok kişi), uygulama geliştiricilerinin kendi mesaj doğrulamalarını oluşturmamalarını şiddetle tavsiye ediyoruz. Bu katmandaki bir hatanın sonuçları yıkıcı olabilir.
Son olarak, yürütme katmanı, bir verinin zincirler arasında taşındığında ve doğrulandığında, hedef bir sözleşme üzerinde çalıştığından sorumlu olan bir dizi dış zincir aktörüdür. Yürütme katmanı, köprüleme yapmak isteyen uygulama geliştiricilerinin ödeme yaparak origin'deki mesajlaşma köprüsü arabirimine veri paketleri göndermesi ve varış noktasında bir sözleşme çağrısını tetiklemesi için kullanılır.
Çoğu durumda, yürütme katmanları, özellikle güvenilir olmayan yöntemler (hafif istemci başlık doğrulaması gibi) oldukça pahalı olduğundan, veri paketlerini özgün merkle köklerine paketleyecek ve varış noktasında merkle kanıtlarını kullanarak bu verileri açacak veya kendileri blok başlıklarını iletecek ve varışta depolama kanıtları yapacak şekilde veri paketlerini paketlerler. Yürütme katmanları, mesaj doğrulamanın riskini tamamen devralır, ancak kendileri düşük güvenlik riskine sahiptir. Yürütme katmanı, mesajları toplama ve alt katmanlara / from alt katmanlardan iletmeyi içerir, ancak bu etkileşimler genellikle oldukça azdır ve denetlemesi oldukça basittir. Yürütme katmanı sözleşmeleri, ücretleri dağıtmak ve dış zincir aktörlerine komisyon ödemekten sorumludur. Ancak, bu katmanda gerçekleşen etkileşimler genellikle minimaldir ve denetlemesi kolaydır. Yürütme katmanı sözleşmeleri, genellikle taşıma ve doğrulama işlemlerinin oldukça pahalı olması nedeniyle, veri paketlerini kökler halinde paketler veya blok başlıklarını kendileri iletir ve hedef zincirde depolama kanıtları gerçekleştirir. Bununla birlikte, yürütme katmanı da mesaj doğrulama risklerini tamamen miras almaktadır. Yürütme katmanında meydana gelen bir hack olayı genellikle komisyon gelirlerinin çalınması veya ağda aktif olarak çalışan dış zincir aktörlerinin fon kaybı ile sonuçlanır. Ancak, mesaj doğrulama katmanındaki hack olaylarından daha düşük etkiye sahiptir.
Özel Durum: Hızlı Yürütme Yürütme ile ilgili ilginç ve yeterince tanınmayan bir husus, bazı türdeki çapraz zincir etkileşimlerinin (güvenli ve güvenilir bir şekilde) taşınmadan ve doğrulanmadan önce bile yürütülebilmesidir.
Bu kavram, iyimser bir rollup köprüsündeki "hızlı likidite" sistemlerinin nasıl çalıştığını düşünerek en iyi şekilde açıklanabilir. Alice, Optimism'den Ethereum'a 100 USDC gönderdiğinde, genellikle fonlarını almak için tam 7 gün beklemesi gerekmektedir. Bu bekleme süresini kısaltmak için, Alice (zaten Ethereum'da 100 USDC'si olan) Bob'a bir ücret ödeyerek fonları hemen göndermesini isteyebilir ve Bob Optimism köprüsünden gelen 100 USDC'yi talep edebilir. Bu örnekte, Bob aslında Alice'in fonlarını önceden sağlamıştır, çünkü gelecekte kendisine geri ödeneceğine dair bir onaylama mekanizması bulunmaktadır.
Hızlı likidite'nin temel ilkesi, hızlı yürütmenin yapılabilir olmasıdır. Sadece zincirler arasında 100 USDC'nin aktarılmasından daha fazlasını yapmak mümkündür. Örneğin, Alice bir DAO ise ve hedef işlev bir onlyDAO belirleyicisi varsa, Bob'un Alice'in işlemini hızlı bir şekilde yürütmesi mümkün olmayacaktır.
Özetlemek gerekirse, daha güvenli mesajlaşma köprüleri inşa etmek istiyorsak, öncelikle doğrulama katmanının güvenliğini ve güvenilirliğini artırmak için odaklanmamız gerekiyor.